﻿var status = require('http-status');
var User = require('../models/user');

var router = require('express').Router();

router.get('/', function (req, res) {
    if (!req.user) {
        return res.status(status.UNAUTHORIZED).end();
    }
    req.user.populate('friends', '_id username realm subject', function (err, user) {
        if (err) {
            return res.status(status.INTERNAL_SERVER_ERROR).end();
        } else {
            return res.status(status.OK).json({friends: user.friends});
        }
    })
});


router.delete('/:name', function (req, res) {
    if (!req.user) {
        return res.status(status.UNAUTHORIZED).end();
    }
    User.findOne({username: req.params.name}, function (err, user) {
        if (err) {
            return res.status(status.INTERNAL_SERVER_ERROR).end();
        }
        if (!user) {
            return res.status(status.NOT_FOUND).json({error: 'User Not Found'});
        } else {
            req.user.update({$pull: {friends: user._id}}, function (err) {
                if (err) {
                    return res.status(status.INTERNAL_SERVER_ERROR).end();
                } else {
                    return res.status(status.OK).end();
                }
            })
        }
    });
});

router.post('/:name', function (req, res) {
    if (!req.user) {
        return res.status(status.UNAUTHORIZED).end();
    }
    User.findOne({username: req.params.name}, function (err, user) {
        if (err) {
            return res.status(status.INTERNAL_SERVER_ERROR).end();
        }
        if (!user) {
            return res.status(status.NOT_FOUND).json({error: 'User Not Found'});
        } else {
            req.user.update({$addToSet: {friends: user._id}}, function (err) {
                if (err) {
                    return res.status(status.INTERNAL_SERVER_ERROR).end();
                } else {
                    return res.status(status.OK).end();
                }
            })
        }
    });
});

module.exports = router;